package com.bdqn.service.impl;

import com.bdqn.dao.PetDao;
import com.bdqn.entity.Pet;
import com.bdqn.service.PetService;
import jakarta.annotation.Resource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

/**
 * PetServiceImpl
 *
 * @author LILIBO
 * @since 2025/1/17
 */
@Service
public class PetServiceImpl implements PetService {

    /**
     * 日志
     */
    private static final Logger log = LoggerFactory.getLogger(PetServiceImpl.class);

    // ① 使用 new PetDaoMySQLImpl() 的方式，即依赖于PetDaoMySQLImpl实现
    // private PetDao petDao = new PetDaoMySQLImpl();

    // ② 不直接写死实现类对象，而是使用简单工厂模式获取（依赖倒置）
    // private PetDao petDao = PetDaoFactory.getInstance(PetDaoFactory.beanName);

    // ③ 使用Spring管理对象，通过配置文件的方式注入
    // private PetDao petDao;

    // ④ 使用注解注入
    // @Resource 当系统中只有一个Bean时自动注入，默认使用名称注入
    // private PetDao petDao; // 类型 名称

    // @Resource(name = "petDaoOracle") // 通过name可指定注入哪个Bean
    // private PetDao petDao; // 类型 名称

    // @Resource(type = PetDaoMySQLImpl.class) // 强制指定按类型进行注入
    // private PetDao petDao; // 类型 名称

    // @Autowired // 当系统中只有一个Bean时自动注入，默认使用类型注入
    // @Autowired(required = false) // required = false表示非必填，对象为null
    // @Qualifier("petDaoOracle") // 配合@Autowired注解实现按名称查找
    // private PetDaoMySQLImpl petDao; // 类型 名称

    @Resource
    private PetDao petDao; // 类型 名称

    public PetDao getPetDao() {
        return petDao;
    }

    public void setPetDao(PetDao petDao) {
        log.debug("PetServiceImpl对象的 setPetDao 方法被调用！参数 petDao = {}", petDao);
        this.petDao = petDao;
    }

    /**
     * 保存宠物信息
     *
     * @param pet
     * @return 成功或失败
     */
    @Override
    public boolean save(Pet pet) {
        return petDao.insert(pet) == 1;
    }

}
